home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume90 / util / qt / qt.asm < prev    next >
Assembly Source File  |  1990-03-03  |  4KB  |  218 lines

  1. ; Qt -- What time is it?
  2. ;
  3. ; Original version (c) 1989 by Martin Laubach
  4. ; Heavy modifications (c) Jim Butterfield Jan 31, 1990
  5. ; Beautified by mjl
  6. ;
  7. ; :ts=12
  8.  
  9.     include "exec/types.i"
  10.     include "libraries/dos.i"
  11.  
  12.     optimon
  13.  
  14. ;-----------------------------------------------------------------
  15. call    macro
  16.     xref    _LVO\1
  17.     jsr     _LVO\1(a6)
  18.     endm
  19.  
  20. vector    macro
  21.     dc.b    \1-Hr12
  22.     endm
  23.  
  24. ;-----------------------------------------------------------------
  25. ; Local variables
  26.  
  27. Local_SIZE:    equ     ds_SIZEOF    ; I need a local DateStamp
  28.  
  29. Today:    equ     -Local_SIZE
  30.  
  31. ;-----------------------------------------------------------------
  32.     section Qt,code
  33.  
  34. Main:    link    a4,#-Local_SIZE
  35.  
  36.     move.l  4,a6
  37.  
  38.     lea     DosName(pc),a1
  39.     moveq   #33,d0
  40.     call    OpenLibrary
  41.     move.l  d0,a6
  42.  
  43.     call    Output
  44.     move.l  d0,a5
  45.  
  46.     lea     Today(a4),a0
  47.     move.l  a0,d1
  48.     call    DateStamp
  49.  
  50.     move.l  Today+ds_Minute(a4),d6
  51.     moveq   #27,d7
  52.     add.l   d7,d6   
  53.  
  54.     divu    #60,d6
  55.     move.w  d6,d7        ; hours (quotient)
  56.  
  57.     moveq   #12,d4
  58.     divu    d4,d7        ; 
  59.  
  60.     clr.w   d7
  61.     swap    d7            ; hours (0-11)
  62.  
  63.     clr.w   d6
  64.     swap    d6            ; mins (remainder)
  65.  
  66.     moveq   #It.vec-Hr.vecs,d0
  67.     bsr.s   PutStr
  68.  
  69.     divu    #5,d6        ; clock divisions
  70.     swap    d6            ; 'almost' adjustment
  71.     moveq   #Ny.vecs-Hr.vecs,d0
  72.     add.w   d6,d0
  73.     bsr.s   PutStr
  74.  
  75.     swap    d6            ; clock divisions
  76.     moveq   #Ps.vec-Hr.vecs,d5
  77.     subq.w  #5,d6        ; adjust to hour
  78.     beq.s   Exact
  79.     bpl.s   GotToP
  80.  
  81.     moveq   #To.vec-Hr.vecs,d5
  82.     neg.w   d6
  83.  
  84. GotToP:    moveq   #Ft.vecs-Hr.vecs,d0
  85.     add.w   d6,d0
  86.     bsr.s   PutStr
  87.  
  88.     move.l  d5,d0
  89.     bsr.s   PutStr
  90.  
  91. Exact:    moveq   #Hr.vecs-Hr.vecs,d0
  92.     add.w   d7,d0
  93.     bsr.s   PutStr
  94.  
  95.     moveq   #OC.vec-Hr.vecs,d0
  96.     tst.w   d6
  97.     bne.s   NoOclk
  98.     bsr.s   PutStr
  99.  
  100. NoOclk:    lea     NewLine.CHR(pc),a3
  101.     bsr.s   Prt1
  102.  
  103.  
  104.     move.l  a6,a1
  105.     move.l  4,a6
  106.     call    CloseLibrary
  107.  
  108.     unlk    a4
  109.     rts
  110.  
  111. ;-----------------------------------------------------------------
  112. ; Print item from table (Hr.vecs)
  113. ;   D0 = String number
  114. ; -->
  115. ;   Nil
  116.  
  117. PutStr:    lea     Hr.vecs(pc),a0
  118.     moveq   #0,d2
  119.     moveq   #0,d3
  120.  
  121.     move.b  0(a0,d0.w),d2        ; Get buffer offset
  122.     move.b  1(a0,d0.w),d3        ; Get next item offset
  123.     sub.w   d2,d3        ; Length of string
  124.  
  125.     beq.s   Exit        ; No string
  126.  
  127.     lea     Hr12(pc),a3        ; Begin of string table
  128.     add.l   a3,d2        ; Begin of string
  129.  
  130. ;-----------------------------------------------------------------
  131. ; Print something + space
  132. ;   D2 = Pointer to something
  133. ;   D3 = Length of something
  134. ; -->
  135. ;   Nil
  136.  
  137. PrtItem:    bsr.s   Put1
  138.  
  139.     lea     Space.CHR(pc),a3
  140.  
  141. Prt1:    move.l  a3,d2
  142.     moveq   #1,d3
  143.  
  144. Put1:    move.l  a5,d1           ; handle
  145. Gotstr:    call    Write
  146.  
  147. Exit:    moveq   #0,d0
  148.     rts
  149.  
  150.  
  151. ;-----------------------------------------------------------------
  152. ; String vector table
  153.  
  154. Hr.vecs:    vector Hr12
  155.     vector Hr01
  156.     vector Hr02
  157.     vector Hr03
  158.     vector Hr04
  159.     vector Hr05
  160.     vector Hr06
  161.     vector Hr07
  162.     vector Hr08
  163.     vector Hr09
  164.     vector Hr10
  165. Ft.vecs:    vector Hr11
  166.     vector Mn05
  167.     vector Mn10
  168.     vector Mn15
  169.     vector Mn20
  170.     vector Mn25
  171.     vector Mn30
  172. Ny.vecs:    vector nearly
  173.     vector almost
  174.     vector justpast
  175.     vector justpast
  176.     vector after
  177. It.vec:    vector Itis
  178. Ps.vec:    vector Past
  179. To.vec:    vector UpTo
  180. OC.vec:    vector OClock
  181.     vector Space.CHR
  182.  
  183. ;-----------------------------------------------------------------
  184. ; Strings
  185.  
  186. Hr12:    dc.b 'twelve'
  187. Hr01:    dc.b 'one'
  188. Hr02:    dc.b 'two'
  189. Hr03:    dc.b 'three'
  190. Hr04:    dc.b 'four'
  191. Hr05:    dc.b 'five'
  192. Hr06:    dc.b 'six'
  193. Hr07:    dc.b 'seven'
  194. Hr08:    dc.b 'eight'
  195. Hr09:    dc.b 'nine'
  196. Hr10:    dc.b 'ten'
  197. Hr11:    dc.b 'eleven'
  198. Mn05:    dc.b 'five'
  199. Mn10:    dc.b 'ten'
  200. Mn15:    dc.b 'a quarter'
  201. Mn20:    dc.b 'twenty'
  202. Mn25:    dc.b 'twenty-five'
  203. Mn30:    dc.b 'half'
  204. nearly:    dc.b 'nearly' 
  205. almost:    dc.b 'almost'
  206. justpast:    dc.b 'just after'
  207. after:    dc.b 'after'
  208. Itis:    dc.b 'It''s'
  209. Past:    dc.b 'past'
  210. UpTo:    dc.b 'to'
  211. OClock:    dc.b 'o''clock'
  212. Space.CHR:    dc.b ' '
  213. NewLine.CHR: dc.b 10
  214. DosName:    dc.b 'dos.library',0
  215.  
  216.     end
  217.  
  218.